use std::process::Command;
use axum::{
    extract::{Path, Query}, routing::{get, post}, Router
};
use serde::Deserialize;

#[derive(Deserialize, Debug)]
struct Info {
    path: String,
}

async fn query2hashmap_handler(query: Query<Info>) -> String {
    let info: Info = query.0;
    let path = info.path;
    let runpath = path.clone();
     // println!("服务地址：{?}",&runpath);
     println!("file:  {:?}",&runpath.to_string());
     // let mut child = Command::new("C:\\Users\\Administrator\\AppData\\Local\\SourceTree\\SourceTree.exe") 
     let mut child = Command::new(runpath)  
        // .arg("arg1")  // 你可以传递多个参数  
        // .arg("arg2")  
        // .stdout(io::BufWriter::new(io::stdout()))  // 可选：将子进程的输出重定向到标准输出  
        // .stderr(io::BufWriter::new(io::stderr()))  // 可选：将子进程的错误输出重定向到标准错误输出  
        .status()  
        .expect("Failed to run the command");  
    if child.success() {  
        println!("Command succeeded");  
    } else {  
        println!("Command failed with status: {}", child);  
    } 
    
    format!("query1: {path:?}")
}

#[tokio::main]
async fn main() {
    //http://127.0.0.1:3000/string?path=C:\\Users\\Administrator\\AppData\\Local\\SourceTree\\SourceTree.exe
    let app = Router::new().route("/string", get(query2hashmap_handler));
    let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
    axum::serve(listener, app).await.unwrap();
    println!("服务启动成功！！！！")
    
    
   // let mut child = Command::new("C:\\Users\\Administrator\\AppData\\Local\\SourceTree\\SourceTree.exe")  
   //      // .arg("arg1")  // 你可以传递多个参数  
   //      // .arg("arg2")  
   //      // .stdout(io::BufWriter::new(io::stdout()))  // 可选：将子进程的输出重定向到标准输出  
   //      // .stderr(io::BufWriter::new(io::stderr()))  // 可选：将子进程的错误输出重定向到标准错误输出  
   //      .status()  
   //      .expect("Failed to run the command");  
   //  if child.success() {  
   //      println!("Command succeeded");  
   //  } else {  
   //      println!("Command failed with status: {}", child);  
   //  } 
}